<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>

    // 手写柯里化
    // function sum(a, b, c) {
    //   return a + b + c
    // }
    // let fn1 = curry(sum)
    // function curry(fn, num2 = []) {
    //   let length = fn.length
    //   return function (...num1) {
    //     let allNum = [...num1, ...num2]
    //     if (allNum.length == length) return sum.apply(this, allNum)
    //     if (allNum.length != length) {
    //       return curry(fn, allNum)
    //     }
    //   }
    // }
    // console.log(fn1(1, 2, 3));
    // console.log(fn1(1, 2)(3));
    // console.log(fn1(1)(2)(3));


    // 对象和数组的扁平化处理
    // var arr = [1, [2, [3, 4]]];

    // function bianPinHua(arr) {
    //   return arr.reduce((pre, next) => {
    //     if (typeof next == 'object') {
    //       return pre.concat(bianPinHua(next))
    //     } else {
    //       return pre.concat(next)
    //     }
    //   }, [])
    // }

    // console.log(bianPinHua(arr));
    // var arr = [1, [2, [3, 4]]];


    // 测试
    // const source = { a: { b: { c: 1, d: 2 }, e: 3 }, f: { g: 2 } }
    // function bingObj(obj) {
    //   let newObj = {}
    //   function demo(obj, key1 = "") {
    //     for (let key in obj) {
    //       let newKey = key1 ? `${key1}.${key}` : key
    //       if (typeof obj[key] == 'object') {
    //         demo(obj[key], newKey)
    //       } else {
    //         newObj[newKey] = obj[key]
    //       }
    //     }
    //   }
    //   demo(obj)
    //   return newObj
    // }
    // console.log(bingObj(source));
    // // 结果 {'a.b.c':1,a.b.d:2,a.e:3,f.g:2}

    



  </script>
</body>

</html>